﻿#ifndef ICDEDITMODULE_H
#define ICDEDITMODULE_H

#include <QWidget>
#include <QMap>
#include "ICDEditModule_global.h"
#include "FileOperation.h"
#include "EnumConfig/EnumEdit.h"
#include "StructConfig/StructEdit.h"

namespace Ui {
class ICDEditModule;
}

class ICDEDITMODULE_EXPORT ICDEditModule : public QWidget
{
    Q_OBJECT

public:
    explicit ICDEditModule(QWidget *parent = nullptr);
    ~ICDEditModule();

public slots:
    /**
     * @brief slot_ShowStructDisplay 显示结构体配置界面
     * @param index 界面索引
     */
    void slt_ShowStructDisplay(const int &index);
    /**
     * @brief slot_AddTopic 添加主题
     * @param topicId 主题id
     * @param topicName 主题名称
     */
    void slt_AddTopic(int &topicId, QString &topicName);
    /**
     * @brief slot_DeleteTopic 删除主题
     * @param topicId 主题Id
     */
    void slt_DeleteTopic(const QVariant &topicId);
    /**
     * @brief slot_AddStrcut 添加结构体
     * @param structId 结构体id
     * @param StructName 结构体名称
     */
    void slt_AddStruct(int &structId, QString &StructName);
    /**
     * @brief slot_DeleteStrcut 删除结构体
     * @param topicId 结构体Id
     */
    void slt_DeleteStruct(const QVariant &structId);
    /**
     * @brief slot_TopicCellValueChanged 主题单元格值改变
     * @param rowId 行Id
     * @param columnIndex 列索引
     * @param value 改变后的值
     * @return 结果码
     */
    ResultCode slt_TopicCellValueChanged(const QVariant &rowId, const int columnIndex,const QVariant &value);
    /**
     * @brief slt_SignalCellValueChanged 信号单元格值改变
     * @param rowId 行Id
     * @param columnIndex 列索引
     * @param value 改变后的值
     * @return 结果码
     */
    ResultCode slt_SignalCellValueChanged(const QVariant &rowId, const int columnIndex,const QVariant &value);
    /**
     * @brief slot_AddSignal 添加信号
     * @param topicId 该信号所属的主题Id
     * @return 该信号的信息
     */
    QVector<QVariant>  slt_AddSignal(const int &topicId);
    /**
     * @brief slt_DeleteSignal 删除信号
     * @param topicId 主题Id
     * @param signalId 信号Id
     */
    void slt_DeleteSignal(const int &topicId, const QVariant &signalId);
    /**
     * @brief slt_GetTopicRowData 获取主题Id对应整行的数据
     * @param rowId 行Id
     * @return 主题Id的整行数据
     */
    QVector<QVariant> slt_GetTopicRowData(const QVariant &rowId);
    /**
     * @brief slt_GetSignalRowData 获取信号Id对应整行的数据
     * @param rowId 行Id
     * @return 信号Id的整行数据
     */
    QVector<QVariant> slt_GetSignalRowData(const QVariant &rowId);
    /**
     * @brief slt_LoadSignalInfo 加载所选主题Id的信号信息
     * @param selectId 主题Id或结构体Id
     * @param type 信号所属父级的类型
     */
    void slt_LoadSignalInfo(ParentType type, const QVariant &selectId);

private:
    Ui::ICDEditModule *ui;
    //! 枚举配置界面对象
    EnumEdit* m_pEnumEdit;
    //! 结构体配置界面对象1
    StructEdit* m_pStructEdit1;
    //! 结构体配置界面对象2
    StructEdit* m_pStructEdit2;
    //! 文件操作对象
    FileOperation* m_pFileOperation;


private:
    /**
     * @brief initDisplay 初始化显示界面
     */
    void initDisplay();
};

#endif // ICDEDITMODULE_H
